﻿#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>



//联合体

//基本作用
// 
//union Un
//{
//	//联合体共用一块内存
//	int a;
//	char b;
//};
//int main()
//{
//	union Un u = { 0 };
//	u.a = 0x11223344;//int型4个字节，正常储存
//	//调试->地址&a->44 33 22 11
//	u.b = 'a';//char型一个字节，在存储了a的地址处储存a
//	//调试->地址&b->61 33 22 11，a的的ASCII值为97,16进制就是61
//	//u.b = 0x61;
//
//	printf("&u=%p\n", &u);
//	printf("&a=%p\n", &u.a);
//	printf("&b=%p\n", &u.b);//求b的地址是跟a的地址一样的，可以印证a、b公用一块内存
//
//	printf("%d\n", sizeof(u));//可以求得联合体u的内存大小为4
//	printf("%d\n", u.a);
//
//	return 0;
//}

//内存存储方式
//联合的⼤⼩⾄少是最⼤成员的⼤⼩。
//当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候，就要对⻬到最⼤对⻬数的整数倍。
//union un1 
//{
//	char a[7];//对其数1(是char 1 与8对比)
//	int b;//对其数4
//	//最大成员大小为7，最大对其数为4,7不是4的倍数，扩展为8为4的倍数
//}a1;
//union un2 
//{
//	char a[3];//对其数1
//	int b;//对其数4
//	//最大成员大小为4，最大对其数为4，4=4*1
//}a2;
//int main()
//{
//	printf("%d\n", sizeof(a1));
//	printf("%d\n", sizeof(a2));
//	return 0;
//}

//使用联体判断大小端
//int check_sys()
//{
//	union
//	{
//		int a;
//		char b;
//	}u;
//	u.a = 1;
//	return u.b;//返回1是小端，返回0是大端
//
//	//假设小端，u.a=1 -> 01 00 00 00
//	//u.b -> 01
//
//	//假设大端，u.a=1 -> 00 00 00 01
//	//u.b -> 00
//
//	//当只有一个字节(char)存储时，从低址值往高地址存储
//	//当有多个字节(int，4个)时，也是从低地址往高地址存储，不过一次存一个int，在int内部，进行大小端字节存存储
//}



//枚举体
//enum Day
//{
//	//Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
//	Mon,//0
//	Tue,//1
//	Wed,//2
//	Thur,//3
//	Fri,//4
//	Sat=6,//6
//	Sun//7
//};
//enum Color
//{
//	red=1,//1
//	bule,//2
//	green//3
//};
//enum Sex
//{
//	male,//0
//	female=4,//4
//	secert//5
//};
////以上enum 类型(如enum Color)是枚举类型，里面的内容是枚举常量
////枚举常量会被自动定义，从0往后
////效用相当于#define 常量 数字(例如#define red 0)
//int main()
//{
//	printf("Mon=%d\n", Mon);
//	printf("Tue=%d\n", Tue);
//	printf("Sat=%d\n", Sat);
//	printf("red=%d\n", red);
//	printf("bule=%d\n", bule);
//	printf("male=%d\n", male);
//	printf("female=%d\n", female);
//	return 0;
//}

//枚举实用举例(计算机改编)
void menu()
{
	printf("**************************\n");
	printf("****** 1.add  2.sub ******\n");
	printf("****** 3.mul  4.div ******\n");
	printf("******    0.exit    ******\n");
	printf("**************************\n");
}
enum option
{
	exit,//0
	add,//1
	sub,//2
	mul,//3
	div//4
	//相较于#define 是快的、简洁的
};
int main()
{
	int input = 0;
	menu();
	printf("请输入:>");
	scanf("%d", &input);
	switch(input)//switch(总写错……)
	{
		case add:
			//?
			break;
		case sub:
			//?
			break;
		case div:
			//?
			break;
		case mul:
			//?
			break;
		case exit:
			//?
			break;
		default:
			//?
			break;
	//这样写就不需要上下划拉看看哪个数字对应哪个运算了，直接些运算符号
	}
	return 0;
}

